package ejb;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import util.XMLReader;
import bean.Accesorio;
import bean.Articulo;
import bean.Ropa;
import ejbInterfaces.AdministradorArticulosBeanLocal;

/**
 * Session Bean implementation class AdministradorArticulosBean
 */
@Stateless
public class AdministradorArticulosBean implements	AdministradorArticulosBeanLocal {

	@PersistenceContext(unitName = "MyDatabase")
	EntityManager em;
	private static final long serialVersionUID = 1769272505784539712L;
	private List<Articulo> articulos;
	static Logger logger = Logger.getLogger(AdministradorArticulosBean.class);

	/**
	 * 
	 * Default constructor.
	 */
	public void ejbCreate() {
	}

	public AdministradorArticulosBean() {
		articulos = new ArrayList<Articulo>();
	}

	public List<Articulo> obtenerArticulos() throws RemoteException {
		List<Articulo> result = null;
		try{
			Query query = em.createQuery("from Articulo");
			result = query.getResultList();
		}catch (Exception e) {
			e.printStackTrace();
			logger.log(Level.ERROR, "Error creando Articulo", e);
		}
		return result;
	}

	public Articulo obtenerNuevoArticulo() throws RemoteException {

		if (XMLReader.getInstance().leerNuevoArt() instanceof Ropa) {
			Ropa nuevoArt = (Ropa) XMLReader.getInstance().leerNuevoArt();
			return nuevoArt;
		} else if (XMLReader.getInstance().leerNuevoArt() instanceof Accesorio) {
			Accesorio nuevoArt = (Accesorio) XMLReader.getInstance()
					.leerNuevoArt();
			return nuevoArt;
		}
		return null;

	}

	public void guardarNuevoArticulo(Articulo articuloNuevo) {
		try {
			Query q = em.createQuery ("from Articulo where referencia = ?1");
			q.setParameter (1, articuloNuevo.getReferencia());
			int result = q.getResultList().size();
			
			if(result == 0){
				em.persist(articuloNuevo);
				logger.log(Level.INFO, "Articulo nuevo persistido" );
				System.out.println("Articulo nuevo persistido");
			}else{
				System.out.println("El articulo ya existe");
				logger.log(Level.INFO, "El articulo ya existe" );
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.log(Level.ERROR, "Error guardando Articulo", e);
		}

	}
}
